#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>


#if 0
//未对齐：13字节
struct
{
	int i;
	char ch;

	union
	{
		int a;
		char c;

	}un;
	float f;

};


//44字节
union
{
	int a;
	double d;
	struct
	{
		int arr[0];
		float f;

	}c;

};

#endif

/*
 *题目：无符号32位的整形 高16位+低16位
 * */
void func1(void)
{
	uint32_t i = 0x11223344;
	printf("%x\n",(i>>16)+i&0xffff);

}

union
{
	struct 
	{
		uint16_t i;
		uint16_t j;
		
	}x;

	uint32_t y;


}a;




void func1_2(void)
{
	a.y = 0x11223344;

	printf("%x\n",a.x.i+a.x.j);
}



/*
 *位域
 * */
union
{
	struct
	{
		char a:1;
		char b:2;
		char c:1;
	}x;

	char y;//1字节 == 8位
}m;
//面试
void func2(void)
{
	m.y = 1;
	printf("%d\n",m.x.a);
//练习	
	m.y = 4;
	printf("%d\n",m.x.b);//-2

};



int main(void)
{
	func1();
	func1_2();
	func2();
	exit(0);
}
